//系统文件操作
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>

#define LOG "log.txt"

int main()
{
  //fopen(LOG,"W")语言上的一句代码，系统需要做以下的工作
  umask(0);
  //int fd=open(LOG,O_CREAT|O_WRONLY|O_TRUNC,0666);//清空写入
  //int fd=open(LOG,O_CREAT|O_WRONLY|O_APPEND,0666);//追加写入
  int fd=open(LOG,O_RDONLY);//只读的方式打开文件
  if(fd==-1)
  {
    printf("fd: %d, errno: %d, errstring: %s\n",fd,errno,strerror(errno));
  }
  else 
  {
    printf("fd: %d, errno: %d, errstring:%s\n",fd,errno,strerror(errno));
  }

  //系统的读操作
  char buffer[1024];
  //这里我们无法做到按行读取，我们是整体读取的。
  ssize_t n=read(fd,buffer,sizeof(buffer)-1);//使用系统接口来进行IO的时候，一定要注意，\0问题
  if(n>0)
  {
    buffer[strlen(buffer)]='\0';
    printf("%s",buffer);
  }

  //C语言，和系统文件接口的关系？C语言是库函数，底层，调用，系统调用
  //系统文件写入
//  const char* msg="aaa";
//  
//  int cnt=1;
//  while(cnt)
//  {
//    char line[256];
//    snprintf(line,sizeof(line),"%s: %d\n",msg,cnt);
//    write(fd,line,strlen(line));//这里的strlen不需要加1，字符串末尾加'\0'是C语言规定的，不是系统规定的，将'\0'写入文本中，会出现乱码
//    --cnt;
//  }
//



  close(fd);

  return 0;
}

























//C语言操作文件
//#include<stdio.h>
//
//#define LOG "log.txt"
//
////C语言文件操作
//int main()
//{
//  //w：默认写方式打开文件，如果文件不存在，就创建它
//  //默认如果只是打开，文件内容都会自动被清空
//  //同时，每次进行写入的时候，都会从最开始进行写入 
//  //FILE* fp=fopen(LOG,"w");
//  //a: 不会清空文件，而是每一次从文件尾部写入，追加
//  //FILE* fp=fopen(LOG,"a");
//  FILE* fp=fopen(LOG,"r");
//  if(fp==NULL)
//  {
//    perror("open:");
//    return 1;
//  }
//  
//  //正常进行文件操作
//  const char* msg="aaa";
//  int cnt=1;
//  
//  while(1)
//  {
//    char line[128];
//    if(fgets(line,sizeof(line),fp)==NULL)break;
//    else printf("%s",line);
//  }
//
////  while(cnt)
////  {
////    char buff[256];
////    snprintf(buff,sizeof(buff),"%s:%d\n",msg,cnt);
////
////    fputs(buff,fp);
////    //printf("%s",buff);
////
////    //fprintf(fp,"%s:%d zxj\n",msg,cnt);
////    //fprintf(stdout,"%s:%d zxj\n",msg,cnt);//Linux,一切皆文件，stdout 是显示器文件
////    //fputs(msg,fp);
////    cnt--;
////  }
////
//  fclose(fp);
//  return 0;
//}
